/**
 * @file lyric_log.h
 * @brief 歌词插件日志输出接口
 * @details 提供统一的日志输出接口，支持插件模式和独立运行模式
 */

#ifndef LYRIC_LOG_H
#define LYRIC_LOG_H

#include <string>
#include <cstdarg>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 日志级别枚举
 */
typedef enum {
    LYRIC_LOG_LEVEL_DEBUG = 0,    ///< 调试信息
    LYRIC_LOG_LEVEL_INFO = 1,     ///< 一般信息
    LYRIC_LOG_LEVEL_WARNING = 2,  ///< 警告信息
    LYRIC_LOG_LEVEL_ERROR = 3     ///< 错误信息
} lyric_log_level_t;


/**
 * @brief 日志输出函数指针类型
 * @param logstr 日志字符串
 */
typedef void (*lyric_log_func_t)(const char* logstr);

/**
 * @brief 初始化日志系统
 * @param log_func 日志输出函数指针，如果为NULL则使用默认输出
 * @param is_output_file 是否为插件模式
 */
void lyric_log_init(lyric_log_func_t log_func, int is_output_file, lyric_log_level_t log_level);

/**
 * @brief 默认日志输出函数
 * @param logstr 日志字符串
 */
void default_log_output(const char* logstr);

/**
 * @brief 清理日志系统
 */
void lyric_log_cleanup(void);

/**
 * @brief 输出调试日志
 * @param format 格式化字符串
 * @param ... 可变参数
 */
void lyric_log_debug(const char* format, ...);

/**
 * @brief 输出信息日志
 * @param format 格式化字符串
 * @param ... 可变参数
 */
void lyric_log_info(const char* format, ...);

/**
 * @brief 输出警告日志
 * @param format 格式化字符串
 * @param ... 可变参数
 */
void lyric_log_warning(const char* format, ...);

/**
 * @brief 输出错误日志
 * @param format 格式化字符串
 * @param ... 可变参数
 */
void lyric_log_error(const char* format, ...);

/**
 * @brief 通用日志输出函数
 * @param level 日志级别
 * @param format 格式化字符串
 * @param ... 可变参数
 */
void lyric_log(lyric_log_level_t level, const char* format, ...);

#ifdef __cplusplus
}
#endif

#endif // LYRIC_LOG_H
